package com.share.device.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.share.device.domain.WorkOrder;
import com.share.device.domain.vo.WorkOrderVO;

/**
 * 工单信息接口
 * 
 * @author         
 * @date 2025-06-29
 */
public interface IWorkOrderService extends IService<WorkOrder>
{
    /**
     * 查询工单信息
     * 
     * @param orderId 工单信息主键
     * @return 工单信息
     */
    public WorkOrder selectWorkOrderById(Integer orderId);

    /**
     * 查询工单信息列表
     *
     * @param workOrder 工单信息
     * @return 工单信息集合
     */
    public List<WorkOrderVO> selectWorkOrderList(WorkOrder workOrder);

    /**
     * 新增工单信息
     * 
     * @param workOrder 工单信息
     * @return 结果
     */
    public int insertWorkOrder(WorkOrder workOrder);

    /**
     * 修改工单信息
     * 
     * @param workOrder 工单信息
     * @return 结果
     */
    public int updateWorkOrder(WorkOrder workOrder);

    /**
     * 批量删除工单信息
     * 
     * @param orderIds 需要删除的工单信息主键集合
     * @return 结果
     */
    public int deleteWorkOrderByIds(Integer[] orderIds);

    /**
     * 删除工单信息信息
     * 
     * @param orderId 工单信息主键
     * @return 结果
     */
    public int deleteWorkOrderById(Integer orderId);

    /**
     * 获取工单详细信息（包含关联信息）
     * 
     * @param orderId 工单ID
     * @return 工单详细信息
     */
    public WorkOrder getWorkOrderDetail(Integer orderId);

    /**
     * 分配工单给处理人
     * 
     * @param orderId 工单ID
     * @param assigneeId 处理人ID
     * @return 结果
     */
    public int assignWorkOrder(Integer orderId, Integer assigneeId);

    /**
     * 更新工单状态
     * 
     * @param orderId 工单ID
     * @param status 新状态
     * @return 结果
     */
    public int updateWorkOrderStatus(Integer orderId, String status);

    /**
     * 完成工单
     * 
     * @param orderId 工单ID
     * @return 结果
     */
    public int completeWorkOrder(Integer orderId);

    /**
     * 根据状态查询工单列表
     * 
     * @param status 工单状态
     * @return 工单信息集合
     */
    public List<WorkOrder> selectWorkOrderListByStatus(String status);

    /**
     * 根据处理人查询工单列表
     * 
     * @param assigneeId 处理人ID
     * @return 工单信息集合
     */
    public List<WorkOrder> selectWorkOrderListByAssignee(Integer assigneeId);

    /**
     * 根据设备ID查询工单列表
     * 
     * @param deviceId 设备ID
     * @return 工单信息集合
     */
    public List<WorkOrder> selectWorkOrderListByDevice(Integer deviceId);

    /**
     * 获取工单统计信息
     * 
     * @return 统计信息
     */
    public Map<String, Object> getWorkOrderStatistics();
} 